home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Delphi Informant Complete 1995 - 2000
/
Delphi Informant Complete 1995 to 2000.iso
/
Delphi Informant Magazine Complete Works SOURCE CODE 1995.rar
/
1995
/
DEC
/
DI9512DF
/
carddeck.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
1995-09-13
|
14KB
|
480 lines
{Written by David R. Faulkner, June 1995}
{P.O. Box 434, Kula HI, 96790}
{CIS: 76116,3513}
{Internet: davef@maui.net}
{The following line tells the compiler to link the CARDDECK.RES resource
file into the executable. This does not give the compiler any information
that it can use to check for syntax errors, but does make the resources
contained within the file available at runtime. Since the file is
physically included in the .EXE, it does not have to be shipped with the
final application}
{$R CARDDECK.RES}
unit CardDeck;
interface
{SysUtils for strpcopy...
WinProcs for LoadBitmap...
Classes for GetValue,Create...
Graphics for TBitmap,Tcolor...
Control for TGraphicControl
DsgnIntf for TIntegerProperty}
uses SysUtils, WinProcs, Classes, Graphics, Controls, DsgnIntf;
{this next sections declares a bunch of constants the programmer can use
in their code to make it more readable}
const
cdAceofSpades = 1;
cd2ofSpades = 2;
cd3ofSpades = 3;
cd4ofSpades = 4;
cd5ofSpades = 5;
cd6ofSpades = 6;
cd7ofSpades = 7;
cd8ofSpades = 8;
cd9ofSpades = 9;
cd10ofSpades =10;
cdJackofSpades =11;
cdQueenofSpades =12;
cdKingofSpades =13;
cdAceofHearts =14;
cd2ofHearts =15;
cd3ofHearts =16;
cd4ofHearts =17;
cd5ofHearts =18;
cd6ofHearts =19;
cd7ofHearts =20;
cd8ofHearts =21;
cd9ofHearts =22;
cd10ofHearts =23;
cdJackofHearts =24;
cdQueenofHearts =25;
cdKingofHearts =26;
cdAceofClubs =27;
cd2ofClubs =28;
cd3ofClubs =29;
cd4ofClubs =30;
cd5ofClubs =31;
cd6ofClubs =32;
cd7ofClubs =33;
cd8ofClubs =34;
cd9ofClubs =35;
cd10ofClubs =36;
cdJackofClubs =37;
cdQueenofClubs =38;
cdKingofClubs =39;
cdAceofDiamonds =40;
cd2ofDiamonds =41;
cd3ofDiamonds =42;
cd4ofDiamonds =43;
cd5ofDiamonds =44;
cd6ofDiamonds =45;
cd7ofDiamonds =46;
cd8ofDiamonds =47;
cd9ofDiamonds =48;
cd10ofDiamonds =49;
cdJackofDiamonds =50;
cdQueenofDiamonds=51;
cdKingofDiamonds =52;
CdJoker =53;
cdCardBack1 =54;
cdCardBack2 =55;
cdCardBack3 =56;
cdCardBack4 =57;
cdCardBack5 =58;
cdCardBack6 =59;
cdCardBack7 =60;
cdCardBack8 =61;
cdCardBack9 =62;
cdFaceCards = [1,11..14,24..27,37..40,50..52];
cdSpades = [1..13];
cdHearts = [14..26];
cdClubs = [27..39];
cdDiamonds = [40..52];
cdBlackCards = [1..13,27..39];
cdRedCards = [14..26,40..52];
{use numeric values to represent suits}
cdSpade = 1;
cdHeart = 2;
cdClub = 3;
cdDiamond = 4;
{use numeric values to represent card colors}
cdBlack = 1;
cdRed = 2;
Type
cdCardDeck = 1..62; {52 cards + 1 joker + 9 backs}
{the following type makes making a custom property editor that excepts both
card names or card numbers a lot easier}
type
TCardEntry = record
Value: cdCardDeck;
Name: string[18];
end;
{fhe follow array maps card numbers to card names}
const
Cards: array[1..62] of TCardEntry = (
(Value: cdAceofSpades; Name: 'cdAceofSpades'),
(Value: cd2ofSpades; Name: 'cd2ofSpades'),
(Value: cd3ofSpades; Name: 'cd3ofSpades'),
(Value: cd4ofSpades; Name: 'cd4ofSpades'),
(Value: cd5ofSpades; Name: 'cd5ofSpades'),
(Value: cd6ofSpades; Name: 'cd6ofSpades'),
(Value: cd7ofSpades; Name: 'cd7ofSpades'),
(Value: cd8ofSpades; Name: 'cd8ofSpades'),
(Value: cd9ofSpades; Name: 'cd9ofSpades'),
(Value: cd10ofSpades; Name: 'cd10ofSpades'),
(Value: cdJackofSpades; Name: 'cdJackofSpades'),
(Value: cdQueenofSpades; Name: 'cdQueenofSpades'),
(Value: cdKingofSpades; Name: 'cdKingofSpades'),
(Value: cdAceofHearts; Name: 'cdAceofHearts'),
(Value: cd2ofHearts; Name: 'cd2ofHearts'),
(Value: cd3ofHearts; Name: 'cd3ofHearts'),
(Value: cd4ofHearts; Name: 'cd4ofHearts'),
(Value: cd5ofHearts; Name: 'cd5ofHearts'),
(Value: cd6ofHearts; Name: 'cd6ofHearts'),
(Value: cd7ofHearts; Name: 'cd7ofHearts'),
(Value: cd8ofHearts; Name: 'cd8ofHearts'),
(Value: cd9ofHearts; Name: 'cd9ofHearts'),
(Value: cd10ofHearts; Name: 'cd10ofHearts'),
(Value: cdJackofHearts; Name: 'cdJackofHearts'),
(Value: cdQueenofHearts; Name: 'cdQueenofHearts'),
(Value: cdKingofHearts; Name: 'cdKingofHearts'),
(Value: cdAceofClubs; Name: 'cdAceofClubs'),
(Value: cd2ofClubs ; Name: 'cd2ofClubs'),
(Value: cd3ofClubs ; Name: 'cd3ofClubs'),
(Value: cd4ofClubs ; Name: 'cd4ofClubs'),
(Value: cd5ofClubs ; Name: 'cd5ofClubs'),
(Value: cd6ofClubs ; Name: 'cd6ofClubs'),
(Value: cd7ofClubs ; Name: 'cd7ofClubs'),
(Value: cd8ofClubs ; Name: 'cd8ofClubs'),
(Value: cd9ofClubs ; Name: 'cd9ofClubs'),
(Value: cd10ofClubs; Name: 'cd10ofClubs'),
(Value: cdJackofClubs; Name: 'cdJackofClubs'),
(Value: cdQueenofClubs; Name: 'cdQueenofClubs'),
(Value: cdKingofClubs; Name: 'cdKingofClubs'),
(Value: cdAceofDiamonds; Name: 'cdAceofDiamonds'),
(Value: cd2ofDiamonds; Name: 'cd2ofDiamonds'),
(Value: cd3ofDiamonds; Name: 'cd3ofDiamonds'),
(Value: cd4ofDiamonds; Name: 'cd4ofDiamonds'),
(Value: cd5ofDiamonds; Name: 'cd5ofDiamonds'),
(Value: cd6ofDiamonds; Name: 'cd6ofDiamonds'),
(Value: cd7ofDiamonds; Name: 'cd7ofDiamonds'),
(Value: cd8ofDiamonds; Name: 'cd8ofDiamonds'),
(Value: cd9ofDiamonds; Name: 'cd9ofDiamonds'),
(Value: cd10ofDiamonds; Name: 'cd10ofDiamonds'),
(Value: cdJackofDiamonds; Name: 'cdJackofDiamonds'),
(Value: cdQueenofDiamonds; Name: 'cdQueenofDiamonds'),
(Value: cdKingofDiamonds; Name: 'cdKingofDiamonds'),
(Value: CdJoker; Name: 'CdJoker'),
(Value: cdCardBack1; Name: 'cdCardBack1'),
(Value: cdCardBack2; Name: 'cdCardBack2'),
(Value: cdCardBack3; Name: 'cdCardBack3'),
(Value: cdCardBack4; Name: 'cdCardBack4'),
(Value: cdCardBack5; Name: 'cdCardBack5'),
(Value: cdCardBack6; Name: 'cdCardBack6'),
(Value: cdCardBack7; Name: 'cdCardBack7'),
(Value: cdCardBack8; Name: 'cdCardBack8'),
(Value: cdCardBack9; Name: 'cdCardBack9') );
type
{Create a custom property editor for cdCardDeck,
allows user to type in name of card, typein number of card,
or select card from list}
TCardValueProperty = class(TIntegerProperty)
public
function GetAttributes: TPropertyAttributes; override;
function GetValue: string; override;
procedure GetValues(Proc: TGetStrProc); override;
procedure SetValue(const Value: string); override;
end;
{Now create TCardDeck}
type
TCardDeck = class(TGraphicControl)
private
{ Private declarations }
FValue: cdCardDeck; {the value of the card being diplayed 1..62}
FStretch: Boolean; {stretch bitmap to fit client?}
procedure SetValue(Value: cdCardDeck);
procedure SetStretch(Value: Boolean);
protected
{ Protected declarations }
procedure Paint; override; {override paint so can paint card faces}
public
{ Public declarations }
constructor Create(AOwner: TComponent); override; {so can set default}
published
{ Published declarations }
property Value: cdCardDeck read FValue write SetValue default cdAceofSpades;
property Stretch: Boolean read FStretch write SetStretch default False;
{surface the drag and drop events so programers can make dragable cards}
property DragCursor;
property DragMode;
property OnDragDrop;
property OnDragOver;
property OnEndDrag;
property OnM